{*******************************************************************}
{                                                                   }
{       Developer Express Visual Component Library                  }
{       ExpressPrinting System COMPONENT SUITE                      }
{                                                                   }
{       Copyright (C) 1998-2014 Developer Express Inc.              }
{       ALL RIGHTS RESERVED                                         }
{                                                                   }
{   The entire contents of this file is protected by U.S. and       }
{   International Copyright Laws. Unauthorized reproduction,        }
{   reverse-engineering, and distribution of all or any portion of  }
{   the code contained in this file is strictly prohibited and may  }
{   result in severe civil and criminal penalties and will be       }
{   prosecuted to the maximum extent possible under the law.        }
{                                                                   }
{   RESTRICTIONS                                                    }
{                                                                   }
{   THIS SOURCE CODE AND ALL RESULTING INTERMEDIATE FILES           }
{   (DCU, OBJ, DLL, ETC.) ARE CONFIDENTIAL AND PROPRIETARY TRADE    }
{   SECRETS OF DEVELOPER EXPRESS INC. THE REGISTERED DEVELOPER IS   }
{   LICENSED TO DISTRIBUTE THE EXPRESSPRINTINGSYSTEM AND            }
{   ALL ACCOMPANYING VCL CONTROLS AS PART OF AN                     }
{   EXECUTABLE PROGRAM ONLY.                                        }
{                                                                   }
{   THE SOURCE CODE CONTAINED WITHIN THIS FILE AND ALL RELATED      }
{   FILES OR ANY PORTION OF ITS CONTENTS SHALL AT NO TIME BE        }
{   COPIED, TRANSFERRED, SOLD, DISTRIBUTED, OR OTHERWISE MADE       }
{   AVAILABLE TO OTHER INDIVIDUALS WITHOUT EXPRESS WRITTEN CONSENT  }
{   AND PERMISSION FROM DEVELOPER EXPRESS INC.                      }
{                                                                   }
{   CONSULT THE END USER LICENSE AGREEMENT FOR INFORMATION ON       }
{   ADDITIONAL RESTRICTIONS.                                        }
{                                                                   }
{*******************************************************************}

unit dxPSfmReportProperties;

interface

{$I cxVer.inc}

uses
  Types, Windows, Classes, Controls, Graphics, StdCtrls, ComCtrls, ExtCtrls,
  Forms, dxPSCore, dxPSForm, dxExtCtrls, Menus, cxLookAndFeelPainters, cxButtons,
  cxControls, cxContainer, cxEdit, cxLabel, cxTextEdit, cxMemo, cxPC,
  cxGeometry, dxCore, cxGraphics, cxLookAndFeels;
                           
type

  { TdxfmPSReportProperties }

  TdxfmPSReportProperties = class(TCustomdxPSExplorerItemPropertySheets)
    Bevel1: TcxLabel;
    Bevel2: TcxLabel;
    btnCancel: TcxButton;
    btnHelp: TcxButton;
    btnOK: TcxButton;
    btnPreview: TcxButton;
    bvlPreviewHost: TBevel;
    edCreationDate: TcxTextEdit;
    edCreator: TcxTextEdit;
    edName: TcxTextEdit;
    Image1: TImage;
    lblCreationDate: TcxLabel;
    lblCreator: TcxLabel;
    memDescription: TcxMemo;
    pcDescription: TcxPageControl;
    pcSummary: TcxPageControl;
    tshDescription: TcxTabSheet;
    tshPreview: TcxTabSheet;
    tshSummary: TcxTabSheet;
    procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
    procedure PreviewClick(Sender: TObject);
  private
    FPreviewBox: TdxPSImageScrollBox;
    function GetFormCaption: string;
    function GetReportCaption: string;
    function GetReportCreationDateTime: TDateTime;
    function GetReportCreator: string;
    function GetReportDescription: string;
    procedure SetReportCaption(const Value: string);
    procedure SetReportCreationDateTime(const Value: TDateTime);
    procedure SetReportCreator(const Value: string);
    procedure SetReportDescription(const Value: string);
    procedure SetReportPreview(Value: TGraphic);
  protected
    procedure CreateWnd; override;

    procedure BeforeConstruction; override;
    procedure Done; override;
    procedure Initialize; override;

    function HasGraphic: Boolean;
    procedure CreateControls; virtual;
    procedure LoadStrings; virtual;
    procedure PrepareControlColors;
  public
    constructor Create(AOwner: TComponent); override;

    function ExplorerItem: TdxPSExplorerItem; reintroduce; overload;

    property FormCaption: string read GetFormCaption;
    property PreviewBox: TdxPSImageScrollBox read FPreviewBox;
    property ReportCaption: string read GetReportCaption write SetReportCaption;
    property ReportCreationDateTime: TDateTime read GetReportCreationDateTime write SetReportCreationDateTime;
    property ReportCreator: string read GetReportCreator write SetReportCreator;
    property ReportDescription: string read GetReportDescription write SetReportDescription;
    property ReportPreview: TGraphic write SetReportPreview;
  end;

implementation

{$R *.dfm}

uses
  Themes, Messages, SysUtils, Dialogs, ExtDlgs,
  cxClasses, cxFormats, dxPSGlbl, dxPSUtl, dxPSRes, dxPcPrVW;
  
{ TdxfmPSReportProperties }

constructor TdxfmPSReportProperties.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  HelpContext := dxPSGlbl.dxhcPSReportPropertiesDlg;
  CheckDialogFormHelpContext(Self, btnHelp, btnCancel, btnOK);
  CreateControls;
  LoadStrings; 
  pcDescription.ActivePage := tshDescription;
end;

function TdxfmPSReportProperties.ExplorerItem: TdxPSExplorerItem;
begin
  Result := inherited ExplorerItem as TdxPSExplorerItem;
end;

procedure TdxfmPSReportProperties.CreateWnd;
begin
  inherited CreateWnd;
  SendMessage(Handle, WM_SETICON, 1, Icon.Handle);
end;

procedure TdxfmPSReportProperties.BeforeConstruction;
begin
  inherited BeforeConstruction;
  Options := Options + [foSizeableDialog];
end;

procedure TdxfmPSReportProperties.Done;
begin
  if ModalResult = mrOK then 
    with ExplorerItem.ReportDocument do
    begin
      BeginUpdate;
      try
        Caption := ReportCaption;
        Description := ReportDescription;
      finally
        EndUpdate;  
      end;  
    end;  
end;

procedure TdxfmPSReportProperties.Initialize;
begin
  with ExplorerItem.ReportDocument do
  begin
    ReportCaption := Caption;
    ReportCreator := Creator;
    ReportCreationDateTime := CreationDate;
    ReportDescription := Description;
    ReportPreview := Preview;
  end;

  edName.Properties.ReadOnly := ExplorerItem.IsCurrentlyLoaded;
  Caption := FormCaption;
  PrepareControlColors;

  btnPreview.Enabled := HasGraphic;
  PreviewBox.Enabled := HasGraphic;
end;

procedure TdxfmPSReportProperties.CreateControls;
begin
  FPreviewBox := TdxPSImageScrollBox.Create(Self);
  with FPreviewBox do
  begin
    Parent := tshPreview;
    Align := alTop;
    Anchors := [akLeft..akBottom];
  end;
  FPreviewBox.Height := cxRectHeight(tshPreview.ClientRect) - btnPreview.Height - 4;
  btnPreview.Left := FPreviewBox.Width - btnPreview.Width;
  btnPreview.Top := FPreviewBox.Height + 4;
end;

function TdxfmPSReportProperties.HasGraphic: Boolean;
begin
  Result := PreviewBox.HasGraphic;
end;

procedure TdxfmPSReportProperties.LoadStrings;
begin
  btnOK.Caption := cxGetResourceString(@sdxBtnOK);
  btnCancel.Caption := cxGetResourceString(@sdxBtnCancel);
  btnHelp.Caption := cxGetResourceString(@sdxBtnHelp);
  btnPreview.Caption := AddEndEllipsis(cxGetResourceString(@sdxPreview));
  
  tshSummary.Caption := cxGetResourceString(@sdxSummary);
  lblCreator.Caption := cxGetResourceString(@sdxCreator);
  lblCreationDate.Caption  := cxGetResourceString(@sdxCreationDate);
  tshDescription.Caption := DropColon(DropAmpersand(cxGetResourceString(@sdxDescription)));
  tshPreview.Caption := DropAmpersand(cxGetResourceString(@sdxPreview));
end;

function TdxfmPSReportProperties.GetFormCaption: string;
begin
  if ReportCaption = '' then
    Result := '"' + ReportCaption + '"  '
  else
    Result := '';

  Result := Result + DropAmpersand(cxGetResourceString(@sdxProperties));
end;

function TdxfmPSReportProperties.GetReportCaption: string;
begin
  Result := edName.Text;
end;

function TdxfmPSReportProperties.GetReportCreationDateTime: TDateTime; 
begin
  Result := SysUtils.StrToDateTime(edCreationDate.Text);
end;

function TdxfmPSReportProperties.GetReportCreator: string;
begin
  Result := edCreator.Text;
end;

function TdxfmPSReportProperties.GetReportDescription: string;
begin
  Result := memDescription.Text;
end;

procedure TdxfmPSReportProperties.SetReportCaption(const Value: string);
begin
  edName.Text := Value;
end;                     

procedure TdxfmPSReportProperties.SetReportCreationDateTime(const Value: TDateTime);
const
  LongDateFormat = 'mmmm d, yyyy';
var
  SystemTime: TSystemTime;
  DefaultLCID: LCID;
  DateFormat, TimeFormat: string;
  Buffer: array[Byte] of Char;
begin                 
  DateTimeToSystemTime(Value, SystemTime);
  DefaultLCID := GetThreadLocale;
  
  DateFormat := GetLocaleStr(DefaultLCID, LOCALE_SLONGDATE, LongDateFormat);
  GetDateFormat(DefaultLCID, 0, @SystemTime, PChar(DateFormat), @Buffer, SizeOf(Buffer));
  edCreationDate.Text := Buffer;
  
  TimeFormat := GetLocaleStr(DefaultLCID, LOCALE_STIMEFORMAT, dxFormatSettings.LongTimeFormat);
  GetTimeFormat(DefaultLCID, 0, @SystemTime, PChar(TimeFormat), @Buffer, SizeOf(Buffer));
  edCreationDate.Text := edCreationDate.Text + ',   ' + Buffer;
end;

procedure TdxfmPSReportProperties.SetReportCreator(const Value: string);
begin
  edCreator.Text := Value;
end;

procedure TdxfmPSReportProperties.SetReportDescription(const Value: string);
begin
  memDescription.Text := Value;
end;

procedure TdxfmPSReportProperties.SetReportPreview(Value: TGraphic);
begin
  PreviewBox.Picture.Graphic := Value;
end;

procedure TdxfmPSReportProperties.PrepareControlColors;
const
  ColorsMap: array[Boolean] of TColor = (clBtnFace, clWindow);
var
  ABkgColor: TColor; 
begin           
  ABkgColor := Painter.DefaultEditorBackgroundColor(edName.Properties.ReadOnly);
  if ABkgColor = clDefault then
    ABkgColor := ColorsMap[edName.Properties.ReadOnly];
  edName.Style.Color := ABkgColor;
end;

procedure TdxfmPSReportProperties.FormCloseQuery(Sender: TObject;
  var CanClose: Boolean);
begin
  CanClose := (ModalResult = mrCancel) or ExplorerItem.IsCurrentlyLoaded or 
    not ExplorerItem.IsNameChanged(ReportCaption) or ExplorerItem.CanRenameTo(ReportCaption);
  if not CanClose then
  begin
    dxPSUtl.MessageError(ExplorerItem.CannotRenameMessageText(ExplorerItem.DisplayName, ReportCaption));
    ActiveControl := edName;
    edName.SelectAll;
  end;
end;

procedure TdxfmPSReportProperties.PreviewClick(Sender: TObject);
begin
  dxPcPrVW.dxShowPicturePreview(PreviewBox.Picture.Graphic);
end;

end.
